﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidad;
using System.Data.SqlClient;
using System.Configuration;

namespace Dao
{
    public class RendimientoDocenteQueryDao
    {

        private static SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AcademicoConnectionString"].ConnectionString);
        public static SqlCommand cmd;

        public RendimientoDocenteQueryDao()
        {

        }

        public static List<RendimientoDocenteQuery> Informe(DateTime? fechaDesde, DateTime? fechaHasta, int? legDocente, int? materia)
        {
            List<RendimientoDocenteQuery> listPromedio = new List<RendimientoDocenteQuery>();
            string sql = @"SELECT m.nombre, a.promedio, a.fechaCierre, d.apellido, d.nombre
                            FROM Asignatura a INNER JOIN
                         Docente d ON a.legDocente = d.legajo INNER JOIN
                         Materia m ON a.codMateria = m.codMateria
                                where 1 = 1 and a.fechaCierre is not null";
            if (legDocente != null)
                sql += " AND d.legajo = @LegDocente";
            if (materia != null)
                sql += " AND m.codMateria = @CodMateria";
            if (fechaDesde != null)
                sql += " AND a.fechaCierre >= @fechaDesde";
            if (fechaHasta != null)
                sql += " AND a.fechaCierre <= @fechaHasta";

            try
            {
                cn.Open();
                cmd = new SqlCommand(sql, cn);
                if (legDocente != null)
                    cmd.Parameters.AddWithValue("@LegDocente", legDocente.Value);
                if (materia != null)
                    cmd.Parameters.AddWithValue("@CodMateria", materia.Value);
                if (fechaDesde != null)
                    cmd.Parameters.AddWithValue("@fechaDesde", fechaDesde.Value);
                if (fechaHasta != null)
                    cmd.Parameters.AddWithValue("@fechaHasta", fechaHasta.Value);

                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    RendimientoDocenteQuery promQ = new RendimientoDocenteQuery();
                    promQ.apenomD = dr[3].ToString() + ", " + dr[4].ToString();
                    promQ.fecha = dr.IsDBNull(2) ? DateTime.Now : (DateTime)dr[2];
                    promQ.materia = dr["nombre"].ToString();
                    promQ.promedio = dr.IsDBNull(1) ? 0 : (decimal)dr["promedio"];
                    listPromedio.Add(promQ);
                }
                dr.Close();
                cn.Close();
            }
            catch (SqlException ex)
            {
                if (cn.State == System.Data.ConnectionState.Open)
                    cn.Close();
                throw new ApplicationException("ERROR al consultar.\n Problemas:" + ex.Message);
            }
            return listPromedio;

        }
    }
}
